package com.bdqn;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * lzl
 */
public class PersonReflection_9 {
    public static void main(String[] args) {
        try {
            //加载Person类
            Class clz = Class.forName("com.bdqn.Person");

            // 根据方法名和参数列表 获取静态常量getAge方法
            //没有参数可以不写或用null表示
            Method getAge = clz.getDeclaredMethod("getAge",null);
            //已超出访问范围
            getAge.setAccessible(true);
            //调用getAge  并传参
            //getAge 方法为静态方法 调用时可以不指定具体 Person实例
            Object returnAge = getAge.invoke(null,null);
            System.out.println("年龄是:"+returnAge);

            Object person = clz.newInstance();  //创建实例

            //silentMethod
            //没有参数可以不写或null表示
            Method silentMethod = clz.getDeclaredMethod("silentMethod",null);
            //超出范围
            silentMethod.setAccessible(true);

            silentMethod.invoke(person,null);

            //setName(String)
            Method setName = clz.getDeclaredMethod("setName", String.class);
            //public
            setName.invoke(person,"New Person");

            Object returnName = clz.getDeclaredMethod("getName").invoke(person);
            System.out.println("刚才设定的name是:"+returnName);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }
    }


}
